{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 棋子检测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From D:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\compat\\v2_compat.py:96: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "non-resource variables are not supported in the long term\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import tensorflow.compat.v1 as tf\n",
    "tf.disable_v2_behavior()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义训练、测试数据集路径    模型的保存路径"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_path = \"C:/Users/王欣哲/Desktop/codes/人工智能基础/问题1 棋盘识别/pic_DB/train\"\n",
    "test_path = \"C:/Users/王欣哲/Desktop/codes/人工智能基础/问题1 棋盘识别/pic_DB/test\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义执行器，使用GPU运算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "gpu_options = tf.GPUOptions(allow_growth=True)\n",
    "gpu_options =tf.GPUOptions(per_process_gpu_memory_fraction=0.8,allow_growth=True) ##每个gpu占用0.8\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t的显存\n",
    "config=tf.ConfigProto(gpu_options=gpu_options,allow_soft_placement=True,log_device_placement=False)\n",
    "sess=tf.Session(config=config)##如果电脑有多个GPU，tensorflow默认全部使用。如果想只使用部分GPU，可以设置CUDA_VISIBLE_DEVICES。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "加载训练集、测试集标签 定义图片加载函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 加载 训练集 标签\n",
    "with open(train_path + \"/label.csv\") as f:\n",
    "    train_label = np.loadtxt(f,delimiter=',') \n",
    "# 加载 测试集 标签\n",
    "with open(test_path + \"/label.csv\") as f:\n",
    "    test_label = np.loadtxt(f,delimiter=',') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_train_batch(batch_size):\n",
    "    \"\"\"获取训练的batch\"\"\"\n",
    "    idx = np.random.randint(1,len(train_label),size=batch_size)# 要抽取的图片数\n",
    "    # 加载图片\n",
    "    _label = np.zeros([batch_size,225,3],dtype = np.float32)\n",
    "    _img = []\n",
    "    for i in range(0,batch_size):\n",
    "        for j in range(0,225):\n",
    "            _label[i,j,int(train_label[idx[i],j])] = 0.99\n",
    "        data_img= Image.open(train_path + \"/\" +str(idx[i])+\".jpg\")\n",
    "        #图片\n",
    "        _img.append((np.array(data_img)/255.0*0.99+0.01).reshape(96*96))\n",
    "    _img = np.asfarray(_img)\n",
    "    return _img,_label\n",
    "\n",
    "def get_test_batch(batch_size):\n",
    "    \"\"\"获取训练的batch\"\"\"\n",
    "    idx = np.random.randint(1,len(test_label),size=batch_size)# 要抽取的图片数\n",
    "    # 加载图片\n",
    "    _label = np.zeros([batch_size,225,3],dtype = np.float32)\n",
    "    _img = []\n",
    "    for i in range(0,batch_size):\n",
    "        for j in range(0,225):\n",
    "            _label[i,j,int(test_label[idx[i],j])] = 0.99\n",
    "        data_img= Image.open(test_path + \"/\" +str(idx[i])+\".jpg\")\n",
    "        #图片\n",
    "        _img.append((np.array(data_img)/255.0*0.99+0.01).reshape(96*96))\n",
    "    _img = np.asfarray(_img)\n",
    "    return _img,_label"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 定义卷积函数、神经网络\n",
    "此处定义了两个卷积神经网络，使用第二个网络的识别效果更好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def conv2d(x, w):\n",
    "    \"\"\"定义卷积函数\"\"\"\n",
    "    return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')\n",
    "\n",
    "def max_pool_2_2(x):\n",
    "    \"\"\"定义2*2最大池化层\"\"\"\n",
    "    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "##########################\n",
    "#     精简卷积神经网络   #\n",
    "##########################\n",
    "# acc=0.99935\n",
    "# 效果没有后面的网络好\n",
    "xs = tf.placeholder(tf.float32,shape=(None,96*96),name = \"xs\")\n",
    "ys = tf.placeholder(tf.float32,shape=(None,15*15,3),name = \"ys\")\n",
    "keep_prob = tf.placeholder(tf.float32,name = \"keep_prob\")\n",
    "\n",
    "y0 = tf.reshape(xs,[-1,96,96,1])\n",
    "# 第一层 卷积\n",
    "w1 = tf.Variable(tf.truncated_normal(shape=[3,3,1,8], stddev=0.1))\n",
    "b1 = tf.Variable(tf.constant(0.1,shape=[8]))\n",
    "h1 =tf.nn.relu(conv2d(y0, w1) + b1)\n",
    "y1 = max_pool_2_2(h1)\n",
    "\n",
    "# 第二层 卷积\n",
    "w2 = tf.Variable(tf.truncated_normal(shape=[3,3,8,16], stddev=0.1))\n",
    "b2 = tf.Variable(tf.constant(0.1,shape=[1, 16]))\n",
    "h2 =tf.nn.relu(conv2d(y1, w2) + b2)\n",
    "y2 = max_pool_2_2(h2)\n",
    "\n",
    "# 第三层 卷积\n",
    "w3 = tf.Variable(tf.truncated_normal(shape=[3,3,16,32], stddev=0.1))\n",
    "b3 = tf.Variable(tf.constant(0.1,shape=[1, 32]))\n",
    "h3 =tf.nn.relu(conv2d(y2, w3) + b3)\n",
    "y3 = max_pool_2_2(h3)\n",
    "\n",
    "# 第四层 全连接\n",
    "w4 = tf.Variable(tf.truncated_normal(shape=[12*12*32, 1024],stddev=0.1))\n",
    "b4 = tf.Variable(tf.constant(0.1,shape=[1, 1024]))\n",
    "h4 = tf.reshape(y3,[-1,12*12*32])\n",
    "y4 = tf.nn.sigmoid(tf.matmul(h4, w4) + b4)\n",
    "\n",
    "h_y4_drop = tf.nn.dropout(y4,keep_prob)#防止过拟合\n",
    "\n",
    "# 第五层 输出层\n",
    "w5= tf.Variable(tf.truncated_normal(shape=[1024, 15*15*3],stddev=0.1))\n",
    "b5 = tf.Variable(tf.constant(0.1,shape=[1, 15*15*3]))\n",
    "y5 = tf.matmul(h_y4_drop,w5)+b5\n",
    "\n",
    "# Softmax\n",
    "y =tf.nn.softmax(tf.reshape(y5,[-1,15*15,3]),name=\"y\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "######################\n",
    "#     卷积神经网络   #\n",
    "#####################\n",
    "# acc=1\n",
    "xs = tf.placeholder(tf.float32,shape=(None,96*96),name = \"xs\")\n",
    "ys = tf.placeholder(tf.float32,shape=(None,15*15,3),name = \"ys\")\n",
    "keep_prob = tf.placeholder(tf.float32,name = \"keep_prob\")\n",
    "# ylab = tf.placeholder(tf.int64,shape=(None,15*15))\n",
    "\n",
    "y0 = tf.reshape(xs,[-1,96,96,1])\n",
    "# 第一层 卷积\n",
    "w1 = tf.Variable(tf.truncated_normal(shape=[3,3,1,8], stddev=0.1))\n",
    "b1 = tf.Variable(tf.constant(0.1,shape=[8]))\n",
    "h1 =tf.nn.relu(conv2d(y0, w1) + b1)\n",
    "y1 = max_pool_2_2(h1)\n",
    "\n",
    "# 第二层 卷积\n",
    "w2 = tf.Variable(tf.truncated_normal(shape=[3,3,8,16], stddev=0.1))\n",
    "b2 = tf.Variable(tf.constant(0.1,shape=[1, 16]))\n",
    "h2 =tf.nn.relu(conv2d(y1, w2) + b2)\n",
    "y2 = max_pool_2_2(h2)\n",
    "\n",
    "# 第三层 全连接\n",
    "w3 = tf.Variable(tf.truncated_normal(shape=[24*24*16, 15*15*3],stddev=0.1))\n",
    "b3 = tf.Variable(tf.constant(0.1,shape=[1, 15*15*3]))\n",
    "h3 = tf.reshape(y2,[-1,24*24*16])\n",
    "y3 = tf.nn.sigmoid(tf.matmul(h3, w3) + b3)\n",
    "\n",
    "# Softmax\n",
    "y =tf.nn.softmax(tf.reshape(y3,[-1,15*15,3]),name = \"y\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义损失函数、优化函数、优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 损失函数\n",
    "cross_entropy = -tf.reduce_sum(ys*tf.log(y),reduction_indices=[1,2])\n",
    "#cross_entropy = -tf.reduce_sum(ys*tf.log(y))\n",
    "loss = tf.reduce_mean(cross_entropy)\n",
    "#loss = tf.reduce_sum(tf.square(ys - y))\n",
    "# 正确率\n",
    "correct = tf.equal(tf.argmax(y,2),tf.argmax(ys,2))\n",
    "acc = tf.reduce_mean(tf.cast(correct,tf.float32))\n",
    "\n",
    "# 优化函数\n",
    "train = tf.train.AdamOptimizer(1e-3).minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 变量初始化\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 9216)\n",
      "0.3288889\n",
      "247.98145\n"
     ]
    }
   ],
   "source": [
    "batch = get_train_batch(1)\n",
    "\n",
    "print(batch[0].shape)\n",
    "#print(sess.run(y,feed_dict={xs:batch[0],ys:batch[1],keep_prob:0.5}))\n",
    "print(sess.run(acc,feed_dict={xs:batch[0],ys:batch[1],keep_prob:1.0}))\n",
    "print(sess.run(loss,feed_dict={xs:batch[0],ys:batch[1],keep_prob:1.0}))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "开始训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "res_train_loss = []\n",
    "res_train_acc = []\n",
    "\n",
    "res_test_loss = []\n",
    "res_test_acc = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  time 0 loss:234.03326  acc:0.486059\n",
      "test  time:0  loss:237.86504  acc:0.454867\n",
      "  time 5 loss:232.14783  acc:0.498403\n",
      "  time 10 loss:224.81958  acc:0.523212\n",
      "  time 15 loss:215.79324  acc:0.556181\n",
      "  time 20 loss:214.11888  acc:0.576042\n",
      "  time 25 loss:207.96591  acc:0.591319\n",
      "  time 30 loss:207.03546  acc:0.588611\n",
      "  time 35 loss:204.46181  acc:0.605156\n",
      "  time 40 loss:198.99777  acc:0.627813\n",
      "  time 45 loss:201.40103  acc:0.620729\n",
      "  time 50 loss:200.42195  acc:0.626580\n",
      "test  time:50  loss:204.46304  acc:0.599444\n",
      "  time 55 loss:201.28038  acc:0.622413\n",
      "  time 60 loss:203.64587  acc:0.616927\n",
      "  time 65 loss:199.99283  acc:0.634861\n",
      "  time 70 loss:203.87996  acc:0.618108\n",
      "  time 75 loss:198.30054  acc:0.646979\n",
      "  time 80 loss:196.60648  acc:0.657691\n",
      "  time 85 loss:202.76846  acc:0.633733\n",
      "  time 90 loss:197.14282  acc:0.661128\n",
      "  time 95 loss:201.96927  acc:0.641250\n",
      "  time 100 loss:198.72974  acc:0.659184\n",
      "test  time:100  loss:200.77614  acc:0.642151\n",
      "  time 105 loss:197.50430  acc:0.662899\n",
      "  time 110 loss:194.71777  acc:0.676545\n",
      "  time 115 loss:196.61284  acc:0.670920\n",
      "  time 120 loss:193.29700  acc:0.683611\n",
      "  time 125 loss:197.64554  acc:0.670486\n",
      "  time 130 loss:192.15961  acc:0.692031\n",
      "  time 135 loss:191.50990  acc:0.694236\n",
      "  time 140 loss:191.88359  acc:0.695503\n",
      "  time 145 loss:188.16269  acc:0.707552\n",
      "  time 150 loss:185.67303  acc:0.721163\n",
      "test  time:150  loss:191.87497  acc:0.688867\n",
      "  time 155 loss:186.14056  acc:0.715069\n",
      "  time 160 loss:187.51910  acc:0.709809\n",
      "  time 165 loss:183.31400  acc:0.730955\n",
      "  time 170 loss:182.60364  acc:0.729601\n",
      "  time 175 loss:180.16292  acc:0.740139\n",
      "  time 180 loss:178.68663  acc:0.741424\n",
      "  time 185 loss:175.83498  acc:0.753872\n",
      "  time 190 loss:174.92427  acc:0.754340\n",
      "  time 195 loss:171.60515  acc:0.767587\n",
      "  time 200 loss:170.81248  acc:0.769497\n",
      "test  time:200  loss:175.47466  acc:0.748009\n",
      "  time 205 loss:168.23952  acc:0.770868\n",
      "  time 210 loss:168.52599  acc:0.771892\n",
      "  time 215 loss:169.10638  acc:0.772326\n",
      "  time 220 loss:166.34695  acc:0.785625\n",
      "  time 225 loss:165.58447  acc:0.785156\n",
      "  time 230 loss:163.87540  acc:0.785399\n",
      "  time 235 loss:163.53816  acc:0.786007\n",
      "  time 240 loss:162.16820  acc:0.800972\n",
      "  time 245 loss:160.24089  acc:0.802448\n",
      "  time 250 loss:159.65454  acc:0.807222\n",
      "test  time:250  loss:165.25195  acc:0.779538\n",
      "  time 255 loss:161.60391  acc:0.787674\n",
      "  time 260 loss:160.12947  acc:0.800208\n",
      "  time 265 loss:158.55722  acc:0.814236\n",
      "  time 270 loss:159.86736  acc:0.801076\n",
      "  time 275 loss:157.02458  acc:0.811788\n",
      "  time 280 loss:159.10909  acc:0.804045\n",
      "  time 285 loss:157.73836  acc:0.804219\n",
      "  time 290 loss:156.80276  acc:0.811649\n",
      "  time 295 loss:155.14526  acc:0.825712\n",
      "  time 300 loss:156.08041  acc:0.814306\n",
      "test  time:300  loss:160.16704  acc:0.796791\n",
      "  time 305 loss:155.14456  acc:0.817986\n",
      "  time 310 loss:154.30856  acc:0.818906\n",
      "  time 315 loss:153.97363  acc:0.819132\n",
      "  time 320 loss:154.67361  acc:0.818993\n",
      "  time 325 loss:153.71277  acc:0.821354\n",
      "  time 330 loss:154.86676  acc:0.815208\n",
      "  time 335 loss:153.15059  acc:0.820226\n",
      "  time 340 loss:152.66168  acc:0.824253\n",
      "  time 345 loss:151.98213  acc:0.827465\n",
      "  time 350 loss:153.88782  acc:0.811615\n",
      "test  time:350  loss:156.37605  acc:0.802942\n",
      "  time 355 loss:151.24561  acc:0.833264\n",
      "  time 360 loss:150.87105  acc:0.829948\n",
      "  time 365 loss:151.67984  acc:0.825868\n",
      "  time 370 loss:150.66510  acc:0.827187\n",
      "  time 375 loss:150.30817  acc:0.833958\n",
      "  time 380 loss:149.66554  acc:0.829705\n",
      "  time 385 loss:148.85255  acc:0.830868\n",
      "  time 390 loss:148.88831  acc:0.833160\n",
      "  time 395 loss:149.59827  acc:0.830955\n",
      "  time 400 loss:147.47943  acc:0.836406\n",
      "test  time:400  loss:153.22841  acc:0.812476\n",
      "  time 405 loss:149.27271  acc:0.832083\n",
      "  time 410 loss:148.39600  acc:0.832552\n",
      "  time 415 loss:147.24014  acc:0.838281\n",
      "  time 420 loss:147.72540  acc:0.836840\n",
      "  time 425 loss:147.35733  acc:0.835781\n",
      "  time 430 loss:148.51443  acc:0.820781\n",
      "  time 435 loss:147.64954  acc:0.830851\n",
      "  time 440 loss:145.94545  acc:0.839497\n",
      "  time 445 loss:146.73807  acc:0.829965\n",
      "  time 450 loss:146.12579  acc:0.836042\n",
      "test  time:450  loss:150.10022  acc:0.816618\n",
      "  time 455 loss:146.74744  acc:0.830122\n",
      "  time 460 loss:146.72835  acc:0.828385\n",
      "  time 465 loss:145.40402  acc:0.841024\n",
      "  time 470 loss:144.88286  acc:0.840937\n",
      "  time 475 loss:144.17392  acc:0.850625\n",
      "  time 480 loss:144.76074  acc:0.845312\n",
      "  time 485 loss:143.84422  acc:0.847309\n",
      "  time 490 loss:143.52341  acc:0.850365\n",
      "  time 495 loss:142.74823  acc:0.851372\n",
      "  time 500 loss:145.02527  acc:0.840868\n",
      "test  time:500  loss:148.10851  acc:0.825502\n",
      "  time 505 loss:143.98782  acc:0.843160\n",
      "  time 510 loss:143.40839  acc:0.848576\n",
      "  time 515 loss:142.93358  acc:0.845972\n",
      "  time 520 loss:143.49347  acc:0.846128\n",
      "  time 525 loss:143.83783  acc:0.843507\n",
      "  time 530 loss:143.29291  acc:0.846111\n",
      "  time 535 loss:143.22046  acc:0.842066\n",
      "  time 540 loss:143.18977  acc:0.843177\n",
      "  time 545 loss:142.87585  acc:0.848333\n",
      "  time 550 loss:143.49234  acc:0.841476\n",
      "test  time:550  loss:146.64813  acc:0.827311\n",
      "  time 555 loss:142.75471  acc:0.849253\n",
      "  time 560 loss:141.97595  acc:0.853490\n",
      "  time 565 loss:142.24968  acc:0.852188\n",
      "  time 570 loss:142.56566  acc:0.847691\n",
      "  time 575 loss:142.72412  acc:0.848542\n",
      "  time 580 loss:143.33031  acc:0.844549\n",
      "  time 585 loss:142.38887  acc:0.846944\n",
      "  time 590 loss:141.50256  acc:0.853108\n",
      "  time 595 loss:143.08530  acc:0.845764\n",
      "  time 600 loss:142.39491  acc:0.848733\n",
      "test  time:600  loss:145.50563  acc:0.835062\n",
      "  time 605 loss:140.65207  acc:0.859826\n",
      "  time 610 loss:142.16957  acc:0.847587\n",
      "  time 615 loss:141.45160  acc:0.852378\n",
      "  time 620 loss:140.78349  acc:0.854514\n",
      "  time 625 loss:141.62769  acc:0.849878\n",
      "  time 630 loss:141.87381  acc:0.848594\n",
      "  time 635 loss:141.48225  acc:0.848941\n",
      "  time 640 loss:141.74217  acc:0.850208\n",
      "  time 645 loss:140.32903  acc:0.864115\n",
      "  time 650 loss:141.17346  acc:0.859253\n",
      "test  time:650  loss:144.71329  acc:0.838729\n",
      "  time 655 loss:139.96730  acc:0.860399\n",
      "  time 660 loss:141.91307  acc:0.842483\n",
      "  time 665 loss:141.56784  acc:0.846979\n",
      "  time 670 loss:141.38615  acc:0.852795\n",
      "  time 675 loss:140.69870  acc:0.858507\n",
      "  time 680 loss:140.20636  acc:0.866580\n",
      "  time 685 loss:140.56799  acc:0.860052\n",
      "  time 690 loss:140.62433  acc:0.856944\n",
      "  time 695 loss:139.24017  acc:0.867847\n",
      "  time 700 loss:139.96506  acc:0.860903\n",
      "test  time:700  loss:143.95241  acc:0.840387\n",
      "  time 705 loss:139.79381  acc:0.866840\n",
      "  time 710 loss:140.02859  acc:0.859444\n",
      "  time 715 loss:139.83722  acc:0.863576\n",
      "  time 720 loss:139.76480  acc:0.858785\n",
      "  time 725 loss:139.76216  acc:0.858837\n",
      "  time 730 loss:141.02826  acc:0.854115\n",
      "  time 735 loss:140.19012  acc:0.859306\n",
      "  time 740 loss:139.62518  acc:0.868333\n",
      "  time 745 loss:139.76802  acc:0.863889\n",
      "  time 750 loss:139.64313  acc:0.871181\n",
      "test  time:750  loss:143.45830  acc:0.845773\n",
      "  time 755 loss:139.55705  acc:0.865313\n",
      "  time 760 loss:139.79892  acc:0.863785\n",
      "  time 765 loss:139.88641  acc:0.868333\n",
      "  time 770 loss:139.96094  acc:0.863368\n",
      "  time 775 loss:139.13472  acc:0.875486\n",
      "  time 780 loss:138.75735  acc:0.873958\n",
      "  time 785 loss:138.91965  acc:0.870642\n",
      "  time 790 loss:139.89818  acc:0.862222\n",
      "  time 795 loss:139.12851  acc:0.869045\n",
      "  time 800 loss:138.52180  acc:0.874219\n",
      "test  time:800  loss:142.90120  acc:0.850529\n",
      "  time 805 loss:139.54968  acc:0.869271\n",
      "  time 810 loss:138.78369  acc:0.870625\n",
      "  time 815 loss:138.30556  acc:0.871528\n",
      "  time 820 loss:139.13821  acc:0.867917\n",
      "  time 825 loss:139.03006  acc:0.871875\n",
      "  time 830 loss:138.51074  acc:0.874948\n",
      "  time 835 loss:138.39812  acc:0.878472\n",
      "  time 840 loss:138.73508  acc:0.874184\n",
      "  time 845 loss:138.73892  acc:0.867448\n",
      "  time 850 loss:138.73215  acc:0.869583\n",
      "test  time:850  loss:142.48013  acc:0.853093\n",
      "  time 855 loss:139.62471  acc:0.867708\n",
      "  time 860 loss:138.51859  acc:0.877292\n",
      "  time 865 loss:137.77902  acc:0.878160\n",
      "  time 870 loss:138.88043  acc:0.869896\n",
      "  time 875 loss:139.12759  acc:0.867847\n",
      "  time 880 loss:137.94551  acc:0.876615\n",
      "  time 885 loss:137.94951  acc:0.876875\n",
      "  time 890 loss:138.63206  acc:0.867049\n",
      "  time 895 loss:137.31314  acc:0.885243\n",
      "  time 900 loss:138.41527  acc:0.878802\n",
      "test  time:900  loss:142.13068  acc:0.860396\n",
      "  time 905 loss:138.02295  acc:0.876562\n",
      "  time 910 loss:138.47005  acc:0.876562\n",
      "  time 915 loss:138.48567  acc:0.875538\n",
      "  time 920 loss:138.02287  acc:0.879497\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  time 925 loss:137.89864  acc:0.880747\n",
      "  time 930 loss:137.66388  acc:0.878385\n",
      "  time 935 loss:136.98312  acc:0.886806\n",
      "  time 940 loss:137.95073  acc:0.879097\n",
      "  time 945 loss:138.16606  acc:0.876024\n",
      "  time 950 loss:137.73320  acc:0.880208\n",
      "test  time:950  loss:141.50191  acc:0.863311\n",
      "  time 955 loss:137.49442  acc:0.881007\n",
      "  time 960 loss:137.15790  acc:0.889271\n",
      "  time 965 loss:137.63882  acc:0.885434\n",
      "  time 970 loss:137.10590  acc:0.884583\n",
      "  time 975 loss:137.25256  acc:0.882240\n",
      "  time 980 loss:138.30061  acc:0.878420\n",
      "  time 985 loss:136.94868  acc:0.887552\n",
      "  time 990 loss:137.81116  acc:0.884549\n",
      "  time 995 loss:137.32884  acc:0.887934\n",
      "  time 1000 loss:137.52121  acc:0.884306\n",
      "test  time:1000  loss:141.19556  acc:0.868467\n",
      "  time 1005 loss:137.32843  acc:0.891042\n",
      "  time 1010 loss:137.27124  acc:0.885226\n",
      "  time 1015 loss:137.61156  acc:0.882292\n",
      "  time 1020 loss:136.61209  acc:0.888299\n",
      "  time 1025 loss:136.08456  acc:0.895642\n",
      "  time 1030 loss:137.43599  acc:0.884948\n",
      "  time 1035 loss:137.09927  acc:0.886111\n",
      "  time 1040 loss:136.30310  acc:0.893194\n",
      "  time 1045 loss:136.37271  acc:0.894358\n",
      "  time 1050 loss:136.82458  acc:0.892014\n",
      "test  time:1050  loss:140.55275  acc:0.875631\n",
      "  time 1055 loss:136.43280  acc:0.891632\n",
      "  time 1060 loss:136.78256  acc:0.893924\n",
      "  time 1065 loss:136.73299  acc:0.893108\n",
      "  time 1070 loss:136.97131  acc:0.892500\n",
      "  time 1075 loss:136.37698  acc:0.897500\n",
      "  time 1080 loss:136.50111  acc:0.893941\n",
      "  time 1085 loss:136.54391  acc:0.889896\n",
      "  time 1090 loss:136.79517  acc:0.889097\n",
      "  time 1095 loss:135.90448  acc:0.892031\n",
      "  time 1100 loss:135.98071  acc:0.898247\n",
      "test  time:1100  loss:140.09944  acc:0.882396\n",
      "  time 1105 loss:136.07578  acc:0.901111\n",
      "  time 1110 loss:136.43175  acc:0.896250\n",
      "  time 1115 loss:137.01813  acc:0.894340\n",
      "  time 1120 loss:135.56424  acc:0.900729\n",
      "  time 1125 loss:135.53236  acc:0.899462\n",
      "  time 1130 loss:136.98853  acc:0.893385\n",
      "  time 1135 loss:136.16391  acc:0.897569\n",
      "  time 1140 loss:136.03331  acc:0.896719\n",
      "  time 1145 loss:136.18446  acc:0.896406\n",
      "  time 1150 loss:135.90631  acc:0.898299\n",
      "test  time:1150  loss:139.50298  acc:0.888067\n",
      "  time 1155 loss:135.70743  acc:0.908733\n",
      "  time 1160 loss:136.00833  acc:0.903299\n",
      "  time 1165 loss:136.17995  acc:0.900122\n",
      "  time 1170 loss:135.35796  acc:0.905573\n",
      "  time 1175 loss:135.90663  acc:0.902535\n",
      "  time 1180 loss:136.13260  acc:0.903021\n",
      "  time 1185 loss:135.75702  acc:0.903802\n",
      "  time 1190 loss:134.99997  acc:0.907031\n",
      "  time 1195 loss:135.01569  acc:0.909115\n",
      "  time 1200 loss:134.79245  acc:0.913316\n",
      "test  time:1200  loss:138.89871  acc:0.895822\n",
      "  time 1205 loss:134.69688  acc:0.910799\n",
      "  time 1210 loss:134.38126  acc:0.911441\n",
      "  time 1215 loss:135.23830  acc:0.906667\n",
      "  time 1220 loss:135.28131  acc:0.909792\n",
      "  time 1225 loss:134.94417  acc:0.913281\n",
      "  time 1230 loss:135.13367  acc:0.913368\n",
      "  time 1235 loss:134.63818  acc:0.918229\n",
      "  time 1240 loss:134.86211  acc:0.916441\n",
      "  time 1245 loss:134.60857  acc:0.922865\n",
      "  time 1250 loss:134.78915  acc:0.917274\n",
      "test  time:1250  loss:138.02348  acc:0.907364\n",
      "  time 1255 loss:134.11449  acc:0.921267\n",
      "  time 1260 loss:135.45969  acc:0.913281\n",
      "  time 1265 loss:133.92229  acc:0.924271\n",
      "  time 1270 loss:134.11636  acc:0.924375\n",
      "  time 1275 loss:134.16040  acc:0.922899\n",
      "  time 1280 loss:133.98729  acc:0.924184\n",
      "  time 1285 loss:133.82147  acc:0.929149\n",
      "  time 1290 loss:134.41937  acc:0.925417\n",
      "  time 1295 loss:133.82428  acc:0.930069\n",
      "  time 1300 loss:133.27649  acc:0.933108\n",
      "test  time:1300  loss:137.11012  acc:0.920578\n",
      "  time 1305 loss:133.42885  acc:0.931389\n",
      "  time 1310 loss:133.53415  acc:0.933924\n",
      "  time 1315 loss:133.16275  acc:0.933472\n",
      "  time 1320 loss:133.28839  acc:0.931806\n",
      "  time 1325 loss:132.45393  acc:0.938177\n",
      "  time 1330 loss:132.60291  acc:0.937448\n",
      "  time 1335 loss:132.95010  acc:0.936476\n",
      "  time 1340 loss:132.56786  acc:0.936840\n",
      "  time 1345 loss:132.29184  acc:0.940816\n",
      "  time 1350 loss:132.36809  acc:0.941927\n",
      "test  time:1350  loss:135.68219  acc:0.934560\n",
      "  time 1355 loss:132.47656  acc:0.940955\n",
      "  time 1360 loss:132.03737  acc:0.945538\n",
      "  time 1365 loss:132.15286  acc:0.944444\n",
      "  time 1370 loss:131.65297  acc:0.947986\n",
      "  time 1375 loss:131.56258  acc:0.947517\n",
      "  time 1380 loss:131.67218  acc:0.948299\n",
      "  time 1385 loss:131.46973  acc:0.951823\n",
      "  time 1390 loss:131.33211  acc:0.952517\n",
      "  time 1395 loss:130.94281  acc:0.953628\n",
      "  time 1400 loss:130.62935  acc:0.953472\n",
      "test  time:1400  loss:134.05215  acc:0.946156\n",
      "  time 1405 loss:130.67743  acc:0.954809\n",
      "  time 1410 loss:130.72565  acc:0.954444\n",
      "  time 1415 loss:130.83215  acc:0.957604\n",
      "  time 1420 loss:130.42917  acc:0.957517\n",
      "  time 1425 loss:130.07988  acc:0.958646\n",
      "  time 1430 loss:130.00272  acc:0.960938\n",
      "  time 1435 loss:129.74310  acc:0.961545\n",
      "  time 1440 loss:129.92227  acc:0.959583\n",
      "  time 1445 loss:129.91438  acc:0.963681\n",
      "  time 1450 loss:129.88802  acc:0.963472\n",
      "test  time:1450  loss:132.30229  acc:0.957316\n",
      "  time 1455 loss:129.17896  acc:0.966424\n",
      "  time 1460 loss:129.59956  acc:0.964167\n",
      "  time 1465 loss:129.40048  acc:0.964878\n",
      "  time 1470 loss:129.31674  acc:0.965434\n",
      "  time 1475 loss:129.26530  acc:0.966510\n",
      "  time 1480 loss:128.91914  acc:0.967309\n",
      "  time 1485 loss:128.88211  acc:0.967240\n",
      "  time 1490 loss:128.29892  acc:0.970729\n",
      "  time 1495 loss:128.72491  acc:0.970104\n",
      "  time 1500 loss:128.36592  acc:0.970694\n",
      "test  time:1500  loss:130.74428  acc:0.965756\n",
      "  time 1505 loss:127.99348  acc:0.972604\n",
      "  time 1510 loss:128.08264  acc:0.969826\n",
      "  time 1515 loss:127.99043  acc:0.971302\n",
      "  time 1520 loss:127.74097  acc:0.974809\n",
      "  time 1525 loss:127.87839  acc:0.971944\n",
      "  time 1530 loss:127.93832  acc:0.974323\n",
      "  time 1535 loss:127.88154  acc:0.974149\n",
      "  time 1540 loss:127.66018  acc:0.974878\n",
      "  time 1545 loss:127.58884  acc:0.975035\n",
      "  time 1550 loss:127.12221  acc:0.976076\n",
      "test  time:1550  loss:129.36911  acc:0.971720\n",
      "  time 1555 loss:127.55977  acc:0.974410\n",
      "  time 1560 loss:127.31384  acc:0.975747\n",
      "  time 1565 loss:126.87559  acc:0.978177\n",
      "  time 1570 loss:126.96346  acc:0.977396\n",
      "  time 1575 loss:126.89683  acc:0.978264\n",
      "  time 1580 loss:127.13826  acc:0.976024\n",
      "  time 1585 loss:126.83689  acc:0.977830\n",
      "  time 1590 loss:126.79124  acc:0.979097\n",
      "  time 1595 loss:126.87608  acc:0.977604\n",
      "  time 1600 loss:126.74429  acc:0.980729\n",
      "test  time:1600  loss:128.32047  acc:0.976182\n",
      "  time 1605 loss:126.77114  acc:0.978819\n",
      "  time 1610 loss:126.69109  acc:0.979688\n",
      "  time 1615 loss:126.72209  acc:0.978628\n",
      "  time 1620 loss:126.32372  acc:0.981476\n",
      "  time 1625 loss:126.38210  acc:0.980052\n",
      "  time 1630 loss:126.45264  acc:0.981372\n",
      "  time 1635 loss:126.37691  acc:0.981424\n",
      "  time 1640 loss:126.22678  acc:0.982569\n",
      "  time 1645 loss:126.15498  acc:0.982986\n",
      "  time 1650 loss:126.13702  acc:0.982899\n",
      "test  time:1650  loss:127.59319  acc:0.980511\n",
      "  time 1655 loss:126.09146  acc:0.983993\n",
      "  time 1660 loss:126.08207  acc:0.983073\n",
      "  time 1665 loss:125.86435  acc:0.984444\n",
      "  time 1670 loss:125.87444  acc:0.984635\n",
      "  time 1675 loss:125.76327  acc:0.985694\n",
      "  time 1680 loss:125.70868  acc:0.985764\n",
      "  time 1685 loss:125.74174  acc:0.985451\n",
      "  time 1690 loss:125.74078  acc:0.986545\n",
      "  time 1695 loss:125.67912  acc:0.986806\n",
      "  time 1700 loss:125.79799  acc:0.986424\n",
      "test  time:1700  loss:126.93143  acc:0.984382\n",
      "  time 1705 loss:125.44802  acc:0.987483\n",
      "  time 1710 loss:125.51118  acc:0.986250\n",
      "  time 1715 loss:125.48924  acc:0.987031\n",
      "  time 1720 loss:125.39674  acc:0.989288\n",
      "  time 1725 loss:125.31937  acc:0.988490\n",
      "  time 1730 loss:125.25901  acc:0.988819\n",
      "  time 1735 loss:125.19009  acc:0.988889\n",
      "  time 1740 loss:125.29111  acc:0.989045\n",
      "  time 1745 loss:125.09111  acc:0.989861\n",
      "  time 1750 loss:125.23946  acc:0.988611\n",
      "test  time:1750  loss:126.29868  acc:0.987551\n",
      "  time 1755 loss:125.10448  acc:0.988628\n",
      "  time 1760 loss:125.17982  acc:0.989931\n",
      "  time 1765 loss:124.97173  acc:0.990139\n",
      "  time 1770 loss:125.00887  acc:0.990052\n",
      "  time 1775 loss:124.92393  acc:0.991007\n",
      "  time 1780 loss:124.81727  acc:0.991146\n",
      "  time 1785 loss:124.88345  acc:0.991389\n",
      "  time 1790 loss:124.80740  acc:0.991458\n",
      "  time 1795 loss:124.71748  acc:0.991806\n",
      "  time 1800 loss:124.75011  acc:0.992535\n",
      "test  time:1800  loss:125.71609  acc:0.990422\n",
      "  time 1805 loss:124.67358  acc:0.992049\n",
      "  time 1810 loss:124.57036  acc:0.992309\n",
      "  time 1815 loss:124.62949  acc:0.992847\n",
      "  time 1820 loss:124.51407  acc:0.992899\n",
      "  time 1825 loss:124.45766  acc:0.992778\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  time 1830 loss:124.46474  acc:0.993281\n",
      "  time 1835 loss:124.43492  acc:0.994115\n",
      "  time 1840 loss:124.34922  acc:0.994687\n",
      "  time 1845 loss:124.46687  acc:0.994097\n",
      "  time 1850 loss:124.42914  acc:0.994583\n",
      "test  time:1850  loss:125.24146  acc:0.993427\n",
      "  time 1855 loss:124.28685  acc:0.994253\n",
      "  time 1860 loss:124.29038  acc:0.995260\n",
      "  time 1865 loss:124.24638  acc:0.994514\n",
      "  time 1870 loss:124.15511  acc:0.995174\n",
      "  time 1875 loss:124.17641  acc:0.995000\n",
      "  time 1880 loss:124.17249  acc:0.995330\n",
      "  time 1885 loss:124.18481  acc:0.995069\n",
      "  time 1890 loss:124.13352  acc:0.994948\n",
      "  time 1895 loss:124.16841  acc:0.995868\n",
      "  time 1900 loss:124.00691  acc:0.996007\n",
      "test  time:1900  loss:124.78168  acc:0.994947\n",
      "  time 1905 loss:124.00214  acc:0.996302\n",
      "  time 1910 loss:124.09103  acc:0.995729\n",
      "  time 1915 loss:124.00925  acc:0.995833\n",
      "  time 1920 loss:123.98065  acc:0.996267\n",
      "  time 1925 loss:123.92934  acc:0.996510\n",
      "  time 1930 loss:123.85673  acc:0.997101\n",
      "  time 1935 loss:123.87411  acc:0.997014\n",
      "  time 1940 loss:123.84863  acc:0.996528\n",
      "  time 1945 loss:123.77549  acc:0.997135\n",
      "  time 1950 loss:123.75132  acc:0.997274\n",
      "test  time:1950  loss:124.41228  acc:0.996671\n",
      "  time 1955 loss:123.79993  acc:0.996840\n",
      "  time 1960 loss:123.77188  acc:0.997639\n",
      "  time 1965 loss:123.72876  acc:0.997378\n",
      "  time 1970 loss:123.74071  acc:0.997674\n",
      "  time 1975 loss:123.69183  acc:0.997257\n",
      "  time 1980 loss:123.68105  acc:0.997760\n",
      "  time 1985 loss:123.56062  acc:0.998299\n",
      "  time 1990 loss:123.58221  acc:0.998177\n",
      "  time 1995 loss:123.56428  acc:0.998264\n",
      "  time 2000 loss:123.53108  acc:0.998316\n",
      "test  time:2000  loss:124.09869  acc:0.997693\n",
      "  time 2005 loss:123.54938  acc:0.998299\n",
      "  time 2010 loss:123.44426  acc:0.998490\n",
      "  time 2015 loss:123.47512  acc:0.998819\n",
      "  time 2020 loss:123.50959  acc:0.998646\n",
      "  time 2025 loss:123.48985  acc:0.998819\n",
      "  time 2030 loss:123.44490  acc:0.998924\n",
      "  time 2035 loss:123.38890  acc:0.998681\n",
      "  time 2040 loss:123.43363  acc:0.998802\n",
      "  time 2045 loss:123.40374  acc:0.998854\n",
      "  time 2050 loss:123.37632  acc:0.998559\n",
      "test  time:2050  loss:123.86054  acc:0.998209\n",
      "  time 2055 loss:123.31857  acc:0.999045\n",
      "  time 2060 loss:123.36304  acc:0.998750\n",
      "  time 2065 loss:123.35154  acc:0.999010\n",
      "  time 2070 loss:123.33008  acc:0.998889\n",
      "  time 2075 loss:123.33395  acc:0.999045\n",
      "  time 2080 loss:123.29232  acc:0.999097\n",
      "  time 2085 loss:123.26572  acc:0.999097\n",
      "  time 2090 loss:123.28399  acc:0.999062\n",
      "  time 2095 loss:123.22031  acc:0.999253\n",
      "  time 2100 loss:123.27088  acc:0.999184\n",
      "test  time:2100  loss:123.61742  acc:0.999093\n",
      "  time 2105 loss:123.25717  acc:0.999219\n",
      "  time 2110 loss:123.20701  acc:0.999340\n",
      "  time 2115 loss:123.22432  acc:0.999219\n",
      "  time 2120 loss:123.20975  acc:0.999462\n",
      "  time 2125 loss:123.18687  acc:0.999497\n",
      "  time 2130 loss:123.18063  acc:0.999444\n",
      "  time 2135 loss:123.15623  acc:0.999653\n",
      "  time 2140 loss:123.15421  acc:0.999531\n",
      "  time 2145 loss:123.16602  acc:0.999687\n",
      "  time 2150 loss:123.12407  acc:0.999601\n",
      "test  time:2150  loss:123.45884  acc:0.999547\n",
      "  time 2155 loss:123.13445  acc:0.999670\n",
      "  time 2160 loss:123.12677  acc:0.999618\n",
      "  time 2165 loss:123.10020  acc:0.999479\n",
      "  time 2170 loss:123.09429  acc:0.999809\n",
      "  time 2175 loss:123.10011  acc:0.999601\n",
      "  time 2180 loss:123.09950  acc:0.999809\n",
      "  time 2185 loss:123.09182  acc:0.999740\n",
      "  time 2190 loss:123.08364  acc:0.999687\n",
      "  time 2195 loss:123.06253  acc:0.999809\n",
      "  time 2200 loss:123.07934  acc:0.999705\n",
      "test  time:2200  loss:123.36131  acc:0.999742\n",
      "  time 2205 loss:123.05394  acc:0.999861\n",
      "  time 2210 loss:123.03867  acc:0.999896\n",
      "  time 2215 loss:123.05116  acc:0.999826\n",
      "  time 2220 loss:123.04066  acc:0.999826\n",
      "  time 2225 loss:123.02616  acc:0.999878\n",
      "  time 2230 loss:123.03860  acc:0.999861\n",
      "  time 2235 loss:123.02711  acc:0.999878\n",
      "  time 2240 loss:123.02101  acc:0.999931\n",
      "  time 2245 loss:123.03539  acc:0.999896\n",
      "  time 2250 loss:123.04033  acc:0.999878\n",
      "test  time:2250  loss:123.27236  acc:0.999849\n",
      "  time 2255 loss:123.02277  acc:0.999948\n",
      "  time 2260 loss:123.01230  acc:0.999948\n",
      "  time 2265 loss:123.01339  acc:0.999844\n",
      "  time 2270 loss:123.00888  acc:0.999913\n",
      "  time 2275 loss:123.00430  acc:0.999931\n",
      "  time 2280 loss:122.97034  acc:1.000000\n",
      "  time 2285 loss:122.97642  acc:0.999983\n",
      "  time 2290 loss:122.98192  acc:1.000000\n",
      "  time 2295 loss:122.97523  acc:1.000000\n",
      "  time 2300 loss:122.97309  acc:0.999965\n",
      "test  time:2300  loss:123.19604  acc:0.999942\n",
      "  time 2305 loss:122.97836  acc:0.999983\n",
      "  time 2310 loss:122.96148  acc:1.000000\n",
      "  time 2315 loss:122.97376  acc:0.999983\n",
      "  time 2320 loss:122.94762  acc:1.000000\n",
      "  time 2325 loss:122.94904  acc:1.000000\n",
      "  time 2330 loss:122.94492  acc:1.000000\n",
      "  time 2335 loss:122.94255  acc:1.000000\n",
      "  time 2340 loss:122.95158  acc:0.999983\n",
      "  time 2345 loss:122.93462  acc:1.000000\n",
      "  time 2350 loss:122.94960  acc:1.000000\n",
      "test  time:2350  loss:123.14602  acc:0.999978\n",
      "  time 2355 loss:122.93521  acc:1.000000\n",
      "  time 2360 loss:122.94762  acc:1.000000\n",
      "  time 2365 loss:122.93040  acc:1.000000\n",
      "  time 2370 loss:122.93452  acc:1.000000\n",
      "  time 2375 loss:122.92373  acc:1.000000\n",
      "  time 2380 loss:122.93475  acc:1.000000\n",
      "  time 2385 loss:122.92527  acc:1.000000\n",
      "  time 2390 loss:122.92323  acc:1.000000\n",
      "  time 2395 loss:122.92278  acc:1.000000\n",
      "  time 2400 loss:122.92448  acc:1.000000\n",
      "test  time:2400  loss:123.09618  acc:0.999991\n",
      "  time 2405 loss:122.91990  acc:1.000000\n",
      "  time 2410 loss:122.91932  acc:1.000000\n",
      "  time 2415 loss:122.91832  acc:1.000000\n",
      "  time 2420 loss:122.92034  acc:1.000000\n",
      "  time 2425 loss:122.91826  acc:1.000000\n",
      "  time 2430 loss:122.92296  acc:1.000000\n",
      "  time 2435 loss:122.91080  acc:1.000000\n",
      "  time 2440 loss:122.91886  acc:1.000000\n",
      "  time 2445 loss:122.91346  acc:1.000000\n",
      "  time 2450 loss:122.90781  acc:1.000000\n",
      "test  time:2450  loss:123.06486  acc:1.000000\n",
      "  time 2455 loss:122.91108  acc:1.000000\n",
      "  time 2460 loss:122.90866  acc:1.000000\n",
      "  time 2465 loss:122.91057  acc:1.000000\n",
      "  time 2470 loss:122.90395  acc:1.000000\n",
      "  time 2475 loss:122.90520  acc:1.000000\n",
      "  time 2480 loss:122.90344  acc:1.000000\n",
      "  time 2485 loss:122.89753  acc:1.000000\n",
      "  time 2490 loss:122.90532  acc:1.000000\n",
      "  time 2495 loss:122.90119  acc:1.000000\n",
      "  time 2500 loss:122.89918  acc:1.000000\n",
      "test  time:2500  loss:123.04339  acc:1.000000\n",
      "  time 2505 loss:122.90016  acc:1.000000\n",
      "  time 2510 loss:122.89528  acc:1.000000\n",
      "  time 2515 loss:122.89632  acc:1.000000\n",
      "  time 2520 loss:122.89653  acc:1.000000\n",
      "  time 2525 loss:122.89217  acc:1.000000\n",
      "  time 2530 loss:122.89715  acc:1.000000\n",
      "  time 2535 loss:122.89619  acc:1.000000\n",
      "  time 2540 loss:122.89479  acc:1.000000\n",
      "  time 2545 loss:122.89558  acc:1.000000\n",
      "  time 2550 loss:122.89454  acc:1.000000\n",
      "test  time:2550  loss:123.02805  acc:1.000000\n",
      "  time 2555 loss:122.89157  acc:1.000000\n",
      "  time 2560 loss:122.89015  acc:1.000000\n",
      "  time 2565 loss:122.89362  acc:1.000000\n",
      "  time 2570 loss:122.89098  acc:1.000000\n",
      "  time 2575 loss:122.88969  acc:1.000000\n",
      "  time 2580 loss:122.88988  acc:1.000000\n",
      "  time 2585 loss:122.89108  acc:1.000000\n",
      "  time 2590 loss:122.89048  acc:1.000000\n",
      "  time 2595 loss:122.88797  acc:1.000000\n",
      "  time 2600 loss:122.88689  acc:1.000000\n",
      "test  time:2600  loss:123.01372  acc:1.000000\n",
      "  time 2605 loss:122.88533  acc:1.000000\n",
      "  time 2610 loss:122.88683  acc:1.000000\n",
      "  time 2615 loss:122.88403  acc:1.000000\n",
      "  time 2620 loss:122.88503  acc:1.000000\n",
      "  time 2625 loss:122.88804  acc:1.000000\n",
      "  time 2630 loss:122.88609  acc:1.000000\n",
      "  time 2635 loss:122.88443  acc:1.000000\n",
      "  time 2640 loss:122.88292  acc:1.000000\n",
      "  time 2645 loss:122.88238  acc:1.000000\n",
      "  time 2650 loss:122.88033  acc:1.000000\n",
      "test  time:2650  loss:123.00180  acc:1.000000\n",
      "  time 2655 loss:122.88126  acc:1.000000\n",
      "  time 2660 loss:122.88272  acc:1.000000\n",
      "  time 2665 loss:122.88383  acc:1.000000\n",
      "  time 2670 loss:122.88134  acc:1.000000\n",
      "  time 2675 loss:122.88091  acc:1.000000\n",
      "  time 2680 loss:122.88076  acc:1.000000\n",
      "  time 2685 loss:122.88138  acc:1.000000\n",
      "  time 2690 loss:122.87955  acc:1.000000\n",
      "  time 2695 loss:122.88052  acc:1.000000\n",
      "  time 2700 loss:122.88058  acc:1.000000\n",
      "test  time:2700  loss:122.99059  acc:1.000000\n",
      "  time 2705 loss:122.87585  acc:1.000000\n",
      "  time 2710 loss:122.87895  acc:1.000000\n",
      "  time 2715 loss:122.87694  acc:1.000000\n",
      "  time 2720 loss:122.87585  acc:1.000000\n",
      "  time 2725 loss:122.87659  acc:1.000000\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  time 2730 loss:122.87571  acc:1.000000\n",
      "  time 2735 loss:122.87751  acc:1.000000\n",
      "  time 2740 loss:122.87488  acc:1.000000\n",
      "  time 2745 loss:122.87512  acc:1.000000\n",
      "  time 2750 loss:122.87535  acc:1.000000\n",
      "test  time:2750  loss:122.98062  acc:1.000000\n",
      "  time 2755 loss:122.87579  acc:1.000000\n",
      "  time 2760 loss:122.87355  acc:1.000000\n",
      "  time 2765 loss:122.87504  acc:1.000000\n",
      "  time 2770 loss:122.87308  acc:1.000000\n",
      "  time 2775 loss:122.87277  acc:1.000000\n",
      "  time 2780 loss:122.87328  acc:1.000000\n",
      "  time 2785 loss:122.87319  acc:1.000000\n",
      "  time 2790 loss:122.87112  acc:1.000000\n",
      "  time 2795 loss:122.87193  acc:1.000000\n",
      "  time 2800 loss:122.87209  acc:1.000000\n",
      "test  time:2800  loss:122.97083  acc:1.000000\n",
      "  time 2805 loss:122.87074  acc:1.000000\n",
      "  time 2810 loss:122.87131  acc:1.000000\n",
      "  time 2815 loss:122.87267  acc:1.000000\n",
      "  time 2820 loss:122.87174  acc:1.000000\n",
      "  time 2825 loss:122.86741  acc:1.000000\n",
      "  time 2830 loss:122.86900  acc:1.000000\n",
      "  time 2835 loss:122.86906  acc:1.000000\n",
      "  time 2840 loss:122.87003  acc:1.000000\n",
      "  time 2845 loss:122.86874  acc:1.000000\n",
      "  time 2850 loss:122.87186  acc:1.000000\n",
      "test  time:2850  loss:122.96544  acc:1.000000\n",
      "  time 2855 loss:122.87007  acc:1.000000\n",
      "  time 2860 loss:122.86587  acc:1.000000\n",
      "  time 2865 loss:122.87045  acc:1.000000\n",
      "  time 2870 loss:122.86814  acc:1.000000\n",
      "  time 2875 loss:122.86730  acc:1.000000\n",
      "  time 2880 loss:122.86974  acc:1.000000\n",
      "  time 2885 loss:122.86738  acc:1.000000\n",
      "  time 2890 loss:122.86494  acc:1.000000\n",
      "  time 2895 loss:122.86730  acc:1.000000\n",
      "  time 2900 loss:122.86701  acc:1.000000\n",
      "test  time:2900  loss:122.95854  acc:1.000000\n",
      "  time 2905 loss:122.86588  acc:1.000000\n",
      "  time 2910 loss:122.86691  acc:1.000000\n",
      "  time 2915 loss:122.86694  acc:1.000000\n",
      "  time 2920 loss:122.86693  acc:1.000000\n",
      "  time 2925 loss:122.86519  acc:1.000000\n",
      "  time 2930 loss:122.86611  acc:1.000000\n",
      "  time 2935 loss:122.86493  acc:1.000000\n",
      "  time 2940 loss:122.86525  acc:1.000000\n",
      "  time 2945 loss:122.86454  acc:1.000000\n",
      "  time 2950 loss:122.86653  acc:1.000000\n",
      "test  time:2950  loss:122.95222  acc:1.000000\n",
      "  time 2955 loss:122.86486  acc:1.000000\n",
      "  time 2960 loss:122.86465  acc:1.000000\n",
      "  time 2965 loss:122.86479  acc:1.000000\n",
      "  time 2970 loss:122.86496  acc:1.000000\n",
      "  time 2975 loss:122.86299  acc:1.000000\n",
      "  time 2980 loss:122.86390  acc:1.000000\n",
      "  time 2985 loss:122.86434  acc:1.000000\n",
      "  time 2990 loss:122.86433  acc:1.000000\n",
      "  time 2995 loss:122.86215  acc:1.000000\n"
     ]
    }
   ],
   "source": [
    "# 训练\n",
    "BATCH_SIZE=256\n",
    "batch_test = get_test_batch(1000)\n",
    "for i in range(3000):\n",
    "    # 生成一个Batch 的数据\n",
    "    batch = get_train_batch(BATCH_SIZE)\n",
    "    # 训练\n",
    "    sess.run(train, feed_dict={xs:batch[0], ys:batch[1],keep_prob:1.0})\n",
    "    \n",
    "    if i%5==0:\n",
    "        l = sess.run(loss, feed_dict={xs:batch[0], ys: batch[1],keep_prob:1.0})\n",
    "        ac = sess.run(acc,feed_dict={xs:batch[0], ys: batch[1],keep_prob:1.0})\n",
    "        res_train_loss.append(l)\n",
    "        res_train_acc.append(ac)\n",
    "        print(\"  time %d loss:%.5f  acc:%f\" %(i,l,ac))\n",
    "        \n",
    "    if i%50==0:\n",
    "        \n",
    "        l = sess.run(loss, feed_dict={xs:batch_test[0], ys: batch_test[1],keep_prob:1.0})\n",
    "        ac = sess.run(acc,feed_dict={xs:batch_test[0], ys: batch_test[1],keep_prob:1.0})\n",
    "        res_test_loss.append(l)\n",
    "        res_test_acc.append(ac)\n",
    "        print(\"test  time:%d  loss:%.5f  acc:%f\" %(i,l,ac))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "打印训练曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "60\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(len(res_test_loss))\n",
    "plt.plot(res_test_loss)\n",
    "plt.title(\"Test-set loss\")\n",
    "plt.savefig(\"C:/Users/王欣哲/Desktop/codes/人工智能基础/问题1 棋盘识别/2.模型训练/test_loss_60.jpg\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "保存训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'./net_2.0/conv_ver_1.ckpt'"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "saver = tf.train.Saver()#为下面保存做准备\n",
    "saver.save(sess, './net_2.0/conv_ver_1.ckpt')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从数据集抽取数据，检测训练情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "batch = get_test_batch(250)\n",
    "sess.run(acc,feed_dict={xs:batch[0], ys: batch[1],keep_prob:1.0})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "122.83965\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1d58c9bea90>"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "batch = get_train_batch(1)\n",
    "infer_y1 = sess.run(y1,feed_dict={xs:batch[0], ys: batch[1]})\n",
    "#infer_y2 = sess.run(y2,feed_dict={xs:batch[0], ys: batch[1]})\n",
    "infer_y = sess.run(y,feed_dict={xs:batch[0], ys: batch[1],keep_prob:1.0})\n",
    "print(sess.run(loss,feed_dict={xs:batch[0], ys: batch[1],keep_prob:1.0}))\n",
    "print(sess.run(acc,feed_dict={xs:batch[0], ys: batch[1],keep_prob:1.0}))\n",
    "plt.imshow(batch[0].reshape(96,96),cmap='Greys',interpolation='None')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 2\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2], dtype=int64)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z = np.argmax(infer_y[0],1)\n",
    "print(np.min(z),np.max(z))\n",
    "plt.imshow(np.argmax(infer_y[0],1).reshape(15,15),cmap='Greys',interpolation='None')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 48, 48, 8)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x1d58c5b0f10>"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#内部卷积输出\n",
    "print(infer_y1.shape)\n",
    "plt.imshow(infer_y1[0,:,:,0],cmap='Greys',interpolation='None')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
